"""
主题: 在类中封装属性名
问题: 你想封装类的实例上面的“私有”数据，但是Python语言并没有访问控制。
提示 : 
    应该让你的非公共名称以单下划线开头。但是，如果你清楚你的代码会涉及到子类， 并且有些内部属性应该在子类中隐藏起来，那么才考虑使用双下划线方案
    定义的一个变量和某个保留关键字冲突，这时候可以使用单下划线作为后缀
"""

class A:
    '''任何以单下划线_开头的名字都应该是内部实现'''
    def __init__(self):
        self._internal = 0  # An internal attribute
        self.public = 1  # A public attribute

    def public_method(self):
        '''
        A public method
        '''
        pass

    def _internal_method(self):
        '''空方法'''
        pass

class B:
    def __init__(self):
        self.__private = 0

    def __repr__(self):
        return 'B({!r})'.format(self.__private)

    def __private_method(self):
        '''空方法'''
        pass

    def public_method(self):
        self.__private_method()


class C(B):
    def __init__(self):
        super().__init__()
        self.__private = 1  # Does not override B.__private

    def __repr__(self):
        return 'C({!r})'.format(self.__private)

    # Does not override B.__private_method()
    def __private_method(self):
        '''空方法'''
        pass    

    def methodA(self):
        self.__private_method()    